package struts2.sample04;
    
import static com.opensymphony.xwork2.Action.*;
    
import java.util.Map;
    
import org.apache.struts2.config.Result;
    
import com.opensymphony.xwork2.ActionContext;
    
    
/**
 * 色んなところをカウントアップするアクション
 */
@Result("count_up.jsp")
public class CountUpAction {
    
    /** アクションのカウント */
    private int count = 0;
    
    
    /**
     * アクションを実行するメソッド
     */
    public String execute(){
        
        // ActionContextとやらを、どこからかわかんないけど持ってくる
        ActionContext actionContext = ActionContext.getContext();
        
        // ActionContextからセッションとかアプリケーションとかに
        // 入ってるデータをMapで取得できる
        Map sessionContext = actionContext.getSession();
        Map applicationContext = actionContext.getApplication();
        
        
        count++;                     // アクションのカウントを１増やす
        countUp(sessionContext);     // セッションのカウントを１増やす
        countUp(applicationContext); // アプリケーションのカウントを１増やす
        
        return SUCCESS;
    }
    
    
    
    /**
     * 引数のMapの「count」っていうキーの値を１つ増やす
     */
    @SuppressWarnings("unchecked")
    private void countUp(Map context){
        
        // 引数のマップから「count」の値を取得
        Integer count = (Integer)context.get("count");
        
        if(count == null){
            // 取得できなかったら「1」
            count = 1;
        }else{
            // 取得できたら1増やす
            count++;
        }
        
        // 増やした値をマップにセットする
        context.put("count", count);
    }
    
    
    
    // getterメソッド
    public int getCount() {
        return count;
    }
    
}
